#include<stdio.h>
#include<stdlib.h>
void main01()
{
	int a = 5;
	int* p = &a;//创建指针p，把a地址给p。*在声明变量的场景意义，声明了指针变量为p
	printf("%d\n", *p);//*间接引用操作符了，目的是  找到（读取）   p所指向的地址中存的那个值，然后输出来
	*p = 100;//把100塞到p所指向的那片地址中。
	printf("%d\n", a);
}//用了*就是要该里面的值了，没用就是代表一个地址。







//////     结构体了
//struct 结构体名
//{数据类型 变量名；
//数据类型 变量名；
//};








//结构体与指针
/*struct point* pp//声明了point类型的结构体指针，变量名为*pp
{
};*/
//(*pp).x = 10; (*pp).y = 5;*pp是找到了这个结构体，然后.是找里面的东西
//或pp->x=10;pp->y=5
struct point
{
	int x;
	int y;
};
int main02() {
	struct point p;
	p.x = 5; p.y = 10;

	struct point* pp;
	pp = &p;
	(*pp).x = 10;
	(*pp).y = 5;

	printf("x=%d,y=%d\n", p.x, p.y);
	printf("x=%d,y=%d\n", pp->x, pp->y);
	return 0;
}








/*typedef 数据类型 别名*/
//typedef int zx,zx就相当于int了
typedef struct//声明了结构体，啥名不知道，别名为po
{
	int x;
	int y;
}po;
int main03()
{
	po p;   //此时就是创建了一个名为p的结构体，就不要加struct了
	p.x = 5;
	p.y = 10;
	printf("%d\n", p.x);
	printf("%d\n", p.y);
	return 0;
}













//动态内存分配
int main04()
{
	int* p;
	p = (int*)malloc(sizeof(int));//在堆内存开辟空间，强制啊转换为Int类型
	*p = 15;
	printf("%d\n", *p);
	free(p);//释放堆内存
	return 0;
}
void main05()
{
	char* s;
	s = (char*)malloc(10);//开辟了10字节的空间，然后转换为char类型
	strcpy(s, "hello");
	printf("%s\n", s);
}
void main()
{
	int* arr = (int*)malloc(5 * sizeof(int));//5个元素，5*4
	for (int i = 0; i < 5; i++)
	{
		arr[i] = 0;
	}
	for (int i = 0; i < 5; i++)
	{
		printf("%d\n", arr[i]);
	}
}
//y用结构体，结构体同上po
void main()
{//开辟的这个空间是用来存放一个po类型的结构体变量
	po* p;
	p = (po*)malloc(sizeof(po));//占8个字节，内存对齐，取最大
	p->x = 5;
	p->y = 10;
	printf("%d\n", p->x);
	printf("%d\n", p->y);
}






